import request from "@/utils/request";

const USER_BASE_URL = "/api";

const UserAPI = {
  /**
   * 获取学生详情
   * 接口文档：/api/admin/user/select/{id}
   */
  getStudentDetail(id: number) {
    return request({
      url: `/api/admin/user/select/${id}`,
      method: "post",
    });
  },

  /**
   * 获取管理员详情
   * 接口文档：/api/admin/user/select/{id}
   */
  getAdminDetail(id: number) {
    return request({
      url: `/api/admin/user/select/${id}`,
      method: "post",
    });
  },
  /**
   * 编辑学生（新增或修改）
   * 接口文档：/api/admin/user/edit
   */
  editStudent(data: Partial<UserType> & { password?: string }) {
    return request({
      url: "/api/admin/user/edit",
      method: "post",
      data: { ...data, role: 1 },
    });
  },

  /**
   * 编辑管理员（新增或修改）
   * 接口文档：/api/admin/user/edit
   */
  editAdmin(data: Partial<UserType> & { password?: string }) {
    return request({
      url: "/api/admin/user/edit",
      method: "post",
      data: { ...data, role: 3 },
    });
  },

  /**
   * 获取当前登录用户信息
   *
   * @returns 登录用户昵称、头像信息，包括角色和权限
   */
  getInfo() {
    return request<any, UserInfo>({
      url: `/api/admin/user/current`,
      method: "post",
    });
  },

  /**
   * 获取用户分页列表1
   *
   * @param queryParams 查询参数1
   */
  getUserPage(queryParams: UserParams) {
    return request<any, PageResult<UserType[]>>({
      url: `/api/admin/user/page/list`,
      method: "post",
      data: queryParams,
    });
  },

  /**
   * 获取管理员分页列表
   *
   * @param queryParams 查询参数1
   */
  getAdminPage(queryParams: AdminParams) {
    // 接口文档：/api/admin/user/page/list 需要提交 userName, role, pageIndex, pageSize
    // 管理员固定 role = 3（从当前用户示例可见 admin 角色为 3）
    const payload = {
      userName: queryParams.userName || "",
      role: 3,
      pageIndex: queryParams.pageIndex,
      pageSize: queryParams.pageSize,
    };
    return request<any, PageResult<UserType[]>>({
      url: `/api/admin/user/page/list`,
      method: "post",
      data: payload,
    });
  },

  /**
   * 删除用户（学生或管理员）
   * 接口文档：/api/admin/user/delete/{id}
   * 注意：文档未标明请求方式，通常可能为 POST 或 GET，如请求失败请根据后端实际调整 method。
   */
  deleteUser(id: number) {
    return request({
      url: `/api/admin/user/delete/${id}`,
      method: "post",
    });
  },

  /**
   * 新增学生（统一使用 /api/admin/user/edit，后端以是否有 id 判断新增或编辑）
   */
  addStudent(data: any) {
    const payload = { ...data, role: 1 };
    return request({
      url: `/api/admin/user/edit`,
      method: "post",
      data: payload,
    }).then((res) => res.data?.response);
  },

  /**
   * 新增管理员
   */
  addAdmin(data: any) {
    const payload = { ...data, role: 3 };
    return request({
      url: `/api/admin/user/edit`,
      method: "post",
      data: payload,
    }).then((res) => res.data?.response);
  },

  /**
   * 用户状态修改
   * 接口文档：/api/admin/user/changeStatus/{id}
   */
  changeStatus(id: number) {
    return request({
      url: `/api/admin/user/changeStatus/${id}`,
      method: "post",
    });
  },

  /**
   * 用户日志分页
   * 接口文档：/api/admin/user/event/page/list
   */
  getUserEventPage(payload: {
    userId?: number | null;
    userName?: string | null;
    pageIndex: number;
    pageSize: number;
  }) {
    return request({
      url: `/api/admin/user/event/page/list`,
      method: "post",
      data: payload,
    });
  },

  /**
   * 学科相关接口（全部 POST）
   */
  getSubjectList() {
    return request({
      url: `/api/admin/education/subject/list`,
      method: "post",
    });
  },

  getSubjectPage(payload: { level?: number | null; pageIndex: number; pageSize: number }) {
    return request({
      url: `/api/admin/education/subject/page`,
      method: "post",
      data: payload,
    });
  },

  getSubjectDetail(id: number) {
    return request({
      url: `/api/admin/education/subject/select/${id}`,
      method: "post",
    });
  },

  editSubject(data: {
    id?: number | null;
    name: string;
    level: number;
    levelName?: string | null;
  }) {
    return request({
      url: `/api/admin/education/subject/edit`,
      method: "post",
      data,
    });
  },

  deleteSubject(id: number) {
    return request({
      url: `/api/admin/education/subject/delete/${id}`,
      method: "post",
    });
  },

  /**
   * 试卷相关
   */
  getPaperPage(payload: {
    id?: number | null;
    level?: number | null;
    subjectId?: number | null;
    pageIndex: number;
    pageSize: number;
  }) {
    return request({
      url: `/api/admin/exam/paper/page`,
      method: "post",
      data: payload,
    });
  },

  /**
   * 任务试卷分页
   * 接口文档：/api/admin/exam/paper/taskExamPage
   */
  getTaskExamPage(payload: {
    subjectId?: number | null;
    level?: number | null;
    paperType?: number | null;
    pageIndex: number;
    pageSize: number;
  }) {
    return request({
      url: `/api/admin/exam/paper/taskExamPage`,
      method: "post",
      data: payload,
    });
  },

  getPaperDetail(id: number) {
    return request({
      url: `/api/admin/exam/paper/select/${id}`,
      method: "post",
    });
  },

  editPaper(data: any) {
    return request({
      url: `/api/admin/exam/paper/edit`,
      method: "post",
      data,
    });
  },

  deletePaper(id: number) {
    return request({
      url: `/api/admin/exam/paper/delete/${id}`,
      method: "post",
    });
  },

  /**
   * 题目相关
   */
  getQuestionPage(payload: any) {
    return request({
      url: `/api/admin/question/page`,
      method: "post",
      data: payload,
    });
  },

  getQuestionDetail(id: number) {
    return request({
      url: `/api/admin/question/select/${id}`,
      method: "post",
    });
  },

  editQuestion(data: any) {
    return request({
      url: `/api/admin/question/edit`,
      method: "post",
      data,
    });
  },

  deleteQuestion(id: number) {
    return request({
      url: `/api/admin/question/delete/${id}`,
      method: "post",
    });
  },

  /**
   * 任务相关
   */
  getTaskPage(payload: { gradeLevel?: number | null; pageIndex: number; pageSize: number }) {
    return request({
      url: `/api/admin/task/page`,
      method: "post",
      data: payload,
    });
  },

  getTaskDetail(id: number) {
    return request({
      url: `/api/admin/task/select/${id}`,
      method: "post",
    });
  },

  editTask(data: any) {
    return request({
      url: `/api/admin/task/edit`,
      method: "post",
      data,
    });
  },

  deleteTask(id: number) {
    return request({
      url: `/api/admin/task/delete/${id}`,
      method: "post",
    });
  },

  /**
   * 消息相关
   */
  getMessagePage(payload: { sendUserName?: string | null; pageIndex: number; pageSize: number }) {
    return request({
      url: `/api/admin/message/page`,
      method: "post",
      data: payload,
    });
  },

  sendMessage(data: { title: string; content: string; receiveUserIds: number[] }) {
    return request({
      url: `/api/admin/message/send`,
      method: "post",
      data,
    });
  },

  /**
   * 答卷分页
   */
  getAnswerPage(payload: { subjectId?: number | null; pageIndex: number; pageSize: number }) {
    return request({
      url: `/api/admin/examPaperAnswer/page`,
      method: "post",
      data: payload,
    });
  },

  /**
   * 获取用户分页列表
   *
   * @param queryParams 查询参数
   */
  getPage(queryParams: UserPageQuery) {
    return request<any, PageResult<UserPageVO[]>>({
      url: `${USER_BASE_URL}/page`,
      method: "get",
      params: queryParams,
    });
  },

  /**
   * 获取用户表单详情
   *
   * @param userId 用户ID
   * @returns 用户表单详情
   */
  getFormData(userId: string) {
    return request<any, UserForm>({
      url: `${USER_BASE_URL}/${userId}/form`,
      method: "get",
    });
  },

  /**
   * 添加用户
   *
   * @param data 用户表单数据
   */
  create(data: UserForm) {
    return request({
      url: `${USER_BASE_URL}`,
      method: "post",
      data: data,
    });
  },

  /**
   * 修改用户
   *
   * @param id 用户ID
   * @param data 用户表单数据
   */
  update(id: string, data: UserForm) {
    return request({
      url: `${USER_BASE_URL}/${id}`,
      method: "put",
      data: data,
    });
  },

  /**
   * 修改用户密码
   *
   * @param id 用户ID
   * @param password 新密码
   */
  resetPassword(id: string, password: string) {
    return request({
      url: `${USER_BASE_URL}/${id}/password/reset`,
      method: "put",
      params: { password: password },
    });
  },

  /**
   * 批量删除用户，多个以英文逗号(,)分割
   *
   * @param ids 用户ID字符串，多个以英文逗号(,)分割
   */
  deleteByIds(ids: string) {
    return request({
      url: `${USER_BASE_URL}/${ids}`,
      method: "delete",
    });
  },

  /** 下载用户导入模板 */
  downloadTemplate() {
    return request({
      url: `${USER_BASE_URL}/template`,
      method: "get",
      responseType: "blob",
    });
  },

  /**
   * 导出用户
   *
   * @param queryParams 查询参数
   */
  export(queryParams: UserPageQuery) {
    return request({
      url: `${USER_BASE_URL}/export`,
      method: "get",
      params: queryParams,
      responseType: "blob",
    });
  },

  /**
   * 导入用户
   *
   * @param file 文件
   */
  import(file: File) {
    const formData = new FormData();
    formData.append("file", file);
    return request<any, ExcelResult>({
      url: `${USER_BASE_URL}/import`,
      method: "post",
      data: formData,
      headers: {
        "Content-Type": "multipart/form-data",
      },
    });
  },

  /** 获取个人中心用户信息 */
  getProfile() {
    return request<any, UserProfileVO>({
      url: `${USER_BASE_URL}/profile`,
      method: "get",
    });
  },

  /** 修改个人中心用户信息 */
  updateProfile(data: UserProfileForm) {
    return request({
      url: `${USER_BASE_URL}/profile`,
      method: "put",
      data: data,
    });
  },

  /** 修改个人中心用户密码 */
  changePassword(data: PasswordChangeForm) {
    return request({
      url: `${USER_BASE_URL}/password`,
      method: "put",
      data: data,
    });
  },

  /**
   *   发送手机/邮箱验证码
   *
   * @param contact 联系方式  手机号/邮箱
   * @param contactType 联系方式类型 MOBILE:手机;EMAIL:邮箱
   */
  sendVerificationCode(contact: string, contactType: string) {
    return request({
      url: `${USER_BASE_URL}/send-verification-code`,
      method: "get",
      params: { contact: contact, contactType: contactType },
    });
  },

  /** 绑定个人中心用户手机 */
  bindMobile(data: MobileBindingForm) {
    return request({
      url: `${USER_BASE_URL}/mobile`,
      method: "put",
      data: data,
    });
  },

  /** 绑定个人中心用户邮箱 */
  bindEmail(data: EmailBindingForm) {
    return request({
      url: `${USER_BASE_URL}/email`,
      method: "put",
      data: data,
    });
  },

  /**
   *  获取用户下拉列表
   */
  getOptions() {
    return request<any, OptionType[]>({
      url: `${USER_BASE_URL}/options`,
      method: "get",
    });
  },
};

export default UserAPI;

//用户信息查询
export interface UserParams {
  userName?: string;
  role?: number;
  pageIndex: number;
  pageSize: number;
}

// 管理员分页参数（role 固定为 3，不需要外部再传）
export interface AdminParams {
  userName?: string;
  pageIndex: number;
  pageSize: number;
}

//用户列表数据类型
export interface UserType {
  id: number;
  userName: string;
  realName: string;
  userLevel: number;
  sex: number;
  phone: string;
  createTime: string;
  status: number;
}

/** 登录用户信息 */
export interface UserInfo {
  /** 用户ID */
  userid?: string;

  /** 用户名 */
  username?: string;
  userName?: string;

  /** 昵称 */
  nickname?: string;

  /** 头像URL */
  avatar?: string;
  imagePath?: string;

  /** 角色 */
  roles: string[];
  role: number;

  /** 权限 */
  perms: string[];
}

/**
 * 用户分页查询对象
 */
export interface UserPageQuery extends PageQuery {
  /** 搜索关键字 */
  keywords?: string;

  /** 用户状态 */
  status?: number;

  /** 部门ID */
  deptId?: string;

  /** 开始时间 */
  createTime?: [string, string];
}

/** 用户分页对象 */
export interface UserPageVO {
  /** 用户ID */
  id: string;
  /** 用户头像URL */
  avatar?: string;
  /** 创建时间 */
  createTime?: Date;
  /** 部门名称 */
  deptName?: string;
  /** 用户邮箱 */
  email?: string;
  /** 性别 */
  gender?: number;
  /** 手机号 */
  mobile?: string;
  /** 用户昵称 */
  nickname?: string;
  /** 角色名称，多个使用英文逗号(,)分割 */
  roleNames?: string;
  /** 用户状态(1:启用;0:禁用) */
  status?: number;
  /** 用户名 */
  username?: string;
}

/** 用户表单类型 */
export interface UserForm {
  /** 用户头像 */
  avatar?: string;
  /** 部门ID */
  deptId?: string;
  /** 邮箱 */
  email?: string;
  /** 性别 */
  gender?: number;
  /** 用户ID */
  id?: string;
  /** 手机号 */
  mobile?: string;
  /** 昵称 */
  nickname?: string;
  /** 角色ID集合 */
  roleIds?: number[];
  /** 用户状态(1:正常;0:禁用) */
  status?: number;
  /** 用户名 */
  username?: string;
}

/** 个人中心用户信息 */
export interface UserProfileVO {
  /** 用户ID */
  id?: string;

  /** 用户名 */
  username?: string;

  /** 昵称 */
  nickname?: string;

  /** 头像URL */
  avatar?: string;

  /** 性别 */
  gender?: number;

  /** 手机号 */
  mobile?: string;

  /** 邮箱 */
  email?: string;

  /** 部门名称 */
  deptName?: string;

  /** 角色名称，多个使用英文逗号(,)分割 */
  roleNames?: string;

  /** 创建时间 */
  createTime?: Date;
}

/** 个人中心用户信息表单 */
export interface UserProfileForm {
  /** 用户ID */
  id?: string;

  /** 用户名 */
  username?: string;

  /** 昵称 */
  nickname?: string;

  /** 头像URL */
  avatar?: string;

  /** 性别 */
  gender?: number;

  /** 手机号 */
  mobile?: string;

  /** 邮箱 */
  email?: string;
}

/** 修改密码表单 */
export interface PasswordChangeForm {
  /** 原密码 */
  oldPassword?: string;
  /** 新密码 */
  newPassword?: string;
  /** 确认新密码 */
  confirmPassword?: string;
}

/** 修改手机表单 */
export interface MobileBindingForm {
  /** 手机号 */
  mobile?: string;
  /** 验证码 */
  code?: string;
}

/** 修改邮箱表单 */
export interface EmailBindingForm {
  /** 邮箱 */
  email?: string;
  /** 验证码 */
  code?: string;
}
